package com.ms.demo.jdkproxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

public class TestMain {

    public static void main(String[] args) {

        Image image = new RealImage("test_10mb.jpg");

        InvocationHandler invocationHandler = new ImageHandle(image);
        ClassLoader classLoader = image.getClass().getClassLoader();
        Class<?>[] interfaces = image.getClass().getInterfaces();

        /** newProxyInstance()：创建一个代理实例
         * 其中有三个参数：
         * 1、classLoader：加载动态生成的代理类的类加载器
         * 2、interfaces：目标对象实现的所有接口的class对象所组成的数组
         * 3、invocationHandler：设置代理对象实现目标对象方法的过程，即代理类中如何重写接口中的抽象方法
         */

        Image proxy  = (Image)Proxy.newProxyInstance(classLoader, interfaces, invocationHandler);//拿到代理对象
        proxy.display();//使用代理对象调用方法
    }
}